package com.csii.mytest;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.csii.mytest.database.MySQLiteHelper;

/**
 * Created by 顾博君 on 2017/3/1.
 */

public class ContentProviderActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //设置布局
        setContentView(R.layout.layout_activity_cp);

        //按钮点击事件
        Button btnReadContact = (Button) findViewById(R.id.btn_read_contact);
        btnReadContact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //点击按钮后，使用方法getContentResolver()获取内容解析者。
                //使用query方法，ContactsContract.Contacts.CONTENT_URI
                // 表示查询联系人的数据，查询结果集合放在游标mCursor里。
                Cursor mCursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
                        null, null, null, null);

                //从结果集合的第一项开始逐项访问
                while (mCursor.moveToNext()) {

                    //联系人姓名 ID 是否有号码
                    String conName;
                    String conPhoneId;
                    int conFlag;

                    //得到指定列名的索引
                    int idConName = mCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
                    int idConPhoneId = mCursor.getColumnIndex(ContactsContract.Contacts._ID);
                    int idConFlag = mCursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);

                    //根据索引得到值
                    conName = mCursor.getString(idConName);
                    conPhoneId = mCursor.getString(idConPhoneId);
                    conFlag = mCursor.getInt(idConFlag);

                    Log.e("---ccc---", "姓名:" + conName +
                            ",ID为" + conPhoneId + ",是否有号码" + conFlag);
                    //如果有手机号码
                    if (conFlag > 0) {

                        //查询联系人号码
                        Cursor mCursor2 = getContentResolver().query(
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                null,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + conPhoneId,
                                null,
                                null);

                        //循环遍历查询到的号码
                        while (mCursor2.moveToNext()) {

                            String phoneNumber = mCursor2.getString(
                                    mCursor2.getColumnIndex(
                                            ContactsContract.CommonDataKinds.Phone.NUMBER));

                            Log.e("---ccc---", "号码为" + phoneNumber);
                        }
                    } else {
                        //如果没有号码
                        Log.e("---ccc---", "该联系人未添加手机号码！");
                    }
                }
            }
        });


        findViewById(R.id.btn_insert).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ContentResolver cr = ContentProviderActivity.this.getContentResolver();
                Uri uri = Uri.parse("content://com.csii.mytest.database.MyContentProvider/" + MySQLiteHelper.TABLEC_NAME);
                ContentValues cv = new ContentValues();
                cv.put("name", "gbj");
                cv.put("address", "江苏无锡");
                Uri uri1 = cr.insert(uri, cv);
                Log.v("--ccc---", "result=" + uri1);
            }
        });
        findViewById(R.id.btn_read).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ContentResolver cr = ContentProviderActivity.this.getContentResolver();
                Uri uri = Uri.parse("content://com.csii.mytest.database.MyContentProvider/" + MySQLiteHelper.TABLEC_NAME);
                ContentValues cv = new ContentValues();
                Cursor mCursor = cr.query(uri, null, null, null, null);
                String conName;
                String conaddress;
                while (mCursor.moveToNext()) {
                    conName = mCursor.getString(1);
                    conaddress = mCursor.getString(2);
                    Log.v("--ccc---", "conName=" + conName + " address=" + conaddress);
                }

            }
        });
    }

    /**
     * 这里再简单梳理一下：
     * <p>
     * 首先是获取内容解析者查询系统联系人的数据得到结果。
     * 对结果进行循环遍历。
     * 之后定义了三个变量，联系人姓名、联系人ID、联系人是否有号码，根据列名获取索引，再根据索引获取值。这里，联系人ID之后在查询联系人号码时根据ID可以查询到号码。
     * 之后如果联系人有号码，查询联系人号码的uri，并循环遍历输出结果，如果没有电话，输出提示。
     *
     * @param context
     */
    public static void startAction(Context context) {
        Intent intent = new Intent(context, ContentProviderActivity.class);
        context.startActivity(intent);
    }
}
